#include <iostream>
using namespace std;

// 继承中同名成员处理
class Base
{
public:
    int a;
    Base()
    {
        a = 100;
    }

    void func()
    {
        cout << "Base - func()调用" << endl;
    }

    void func(int a)
    {
        cout << "Base - func(int a)调用" << endl;
    }
};

class Son:public Base
{
public:
    int a;
    Son()
    {
        a = 999;
    }

    void func()
    {
        cout << "Son - func()调用" << endl;
    }
};

// 同名成员属性处理
void test1()
{
    Son s;
    cout << "Son a = " << s.a << endl;
    //如果通过子类对象 访问到父类中同名成员，需要加作用域
    cout << "Base a = " << s.Base::a << endl;
}

// 同名成员函数处理
void test2()
{
    Son s;
    s.func();// 直接调用的是子类中的 同名成员
    s.Base::func();// 调用的是父类中的 同名成员

    //如果子类中，出现了与父类同名的成员函数
    //子类的同名成员会隐藏掉所有父类同名成员函数
    //error: s.func(100);

    //如果想要访问父类中被隐藏的同名成员函数，需要加作用域
    s.Base::func(10);
}
int main()
{
    test1();
    test2();
    return 0;
}